En esta demostración se resumen los pasos de un análisis de datos aplicado a un conjunto de datos obtenidos del repositorio de aprendizaje automático de la UCI (University of California, Irvine), enlace aqui en el que se adquieren los datos de una planta de propulsión de un barco tipo fragata. Los datos disponibles fueron tomados en estado estable de la planta.
El objetivo del ejercicio es construir un modelo que permita determinar el grado de degradación del sistema de compresión de la planta a partir de los datos disponibles.
Los datos están en formato .csv en una tabla con 18 columnas y 11934 filas, donde las columnas son variables y las filas son observaciones. Las variables son definidas como:
Para este caso, la variable Coeficiente de estado de degradación del compresor sera la variable dependiente sobre la que se van a realizar las predicciones (es la variable de salida del modelo) las demás variables serán independientes o regresores (variables de entrada al modelo).
En esta fase se analizan los datos por medio de gráficas y estudio de métricas estadísticas para entender las diferentes relaciones entre las variables, este análisis es importante para:
El análisis exploratorio se realizó en las siguientes fases:
Los datos son depurados de forma que solo queden los que tienen el potencial de aportar información para la construcción del modelo, se eliminan las variables vacías o aquellas con datos nulos, así mismo se eliminan las que tienen varianzas cercanas a cero (es decir, aquellas en las que todos sus valores son iguales):
Variables que tienen varianza cerca de cero:
[1] "Comp_in_temp" "Comp_in_press"
Las cuales son eliminadas del conjunto de datos.
Haga click en cada “tab” para ver las gráficas
Los datos son explorados ahora observando gráficas que representan las relaciones entre la distintas variables:
DEGRADACIÓN DEL COMPRESOR: Se observa el comportamiento de coeficiente de decaimiento del compresor versus las revoluciones por minuto de la turbina
De la anterior grafica se puede observar que los datos están fuertemente relacionados con la posición de la palanca, esto se repite en todas las variables del conjunto de datos:
DEGRADACIÓN DEL COMPRESOR: Se observa el comportamiento de coeficiente de decaimiento del compresor versus diferentes variables
Conclusión: Se deben estudiar los datos segregados por cada posición de la palanca de mando.
Estudiando el conjunto de datos segregado por cada posición de la palanca de mando se encuentran relaciones no lineales, en este caso se muestran algunas relación para el conjunto de datos que corresponde a la primera posición de la palanca de mando (1.138):
Graficas del comportamiento de algunas de las variables, el nombre en la columna corresponde a la variable independiente, mientras que el nombre en la fila corresponde a la variable dependiente
Conclusión: Se deben estudiar modelos que puedan captar relaciones no lineales.
Así mismo, se tienen relaciones lineales entre variables:
Graficas del comportamiento de algunas de las variables, el nombre en la columna corresponde a la variable independiente, mientras que el nombre en la fila corresponde a la variable dependiente
Conclusión: Debe tenerse en cuenta que tantas variables con relaciones lineales son superfluas y añaden complejidad innecesaria al modelo, dado que su correlación es alta se debe proponer la eliminación de alguna de estas variables.
En las anteriores secciones se ha encontrado que hay la posibilidad de que muchas variables tengan fuertes relaciones lineales entre si, esta interdependencia es contraproducente porque aumenta la complejidad del modelo pero no aporta información relevante, se hace un análisis estadístico para identificar las variables mas relevantes.
| Variabilidad | |
|---|---|
| GT_shft_trq | 2020 |
| GT_rpm | 12313 |
| Gen_rpm | 222 |
| S_prop_trq | 12629 |
| Turbine_temp | 17121 |
| Comp_out_temp | 2330 |
| Turbine_press | 5608 |
| Comp_out_press | 12953 |
| Turb_inj_cnt | 155 |
| Fuel_flow | 11720 |
Se consideran que valores por encima de 10 o 20 pueden ser problemáticos, en este caso se tienen variables con valores de hasta 17000. Después de la selección se obtiene:
| Variabilidad | |
|---|---|
| GT_rpm | 9 |
| Gen_rpm | 2 |
| Comp_out_temp | 16 |
| Turbine_press | 15 |
| Turb_inj_cnt | 9 |
Los modelos se entrenarán usando las variables seleccionadas. Para poder medir el desempeño real de los modelos, los datos se dividen en dos partes, el 75% de los datos se usan para el entrenamiento de los modelos, mientras que el 25% restante se usa para observar el comportamiento de estos frente a datos que no son conocidos.
NOTA 1: Hay que tener en cuenta que los datos usados fueron segregados previamente en el análisis de gráficas exploratorias, en donde se determino que los datos se iban a separar según la posición de la palanca de mando, por esta razón, aunque el conjunto de datos original tiene cerca de 12000 observaciones, los datos que estamos usando son solo 1326 que corresponden a la primera posición de la palanca. En ese mismo sentido se debe tener en cuenta que para las otras posiciones se deben entrenar modelos distintos con sus respectivos datos.
Esta segregación se realiza haciendo muestreos aleatorios de las observaciones, la segregación se ilustra en las tablas a continuación:
Hacer click en cada Tab
Después de la segregación se tiene:
Con el conjunto de datos de entrenamiento se entrenan cuatro modelos distintos con grados de complejidad diferentes:
Call:
lm(formula = Comp_decay ~ GT_rpm + Gen_rpm + Comp_out_temp +
Turbine_press + Turb_inj_cnt, data = df1_tr)
Residuals:
Min 1Q Median 3Q Max
-1.710e-03 -3.816e-04 1.395e-05 3.669e-04 2.010e-03
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.188e+00 3.941e-03 808.77 <2e-16 ***
GT_rpm 1.577e-04 1.806e-06 87.30 <2e-16 ***
Gen_rpm -1.777e-04 6.834e-07 -260.08 <2e-16 ***
Comp_out_temp -3.107e-03 7.763e-06 -400.30 <2e-16 ***
Turbine_press 4.078e-01 1.034e-03 394.35 <2e-16 ***
Turb_inj_cnt 2.324e-04 5.279e-06 44.02 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.0005879 on 990 degrees of freedom
Multiple R-squared: 0.9984, Adjusted R-squared: 0.9984
F-statistic: 1.265e+05 on 5 and 990 DF, p-value: < 2.2e-16
Call:
lm(formula = lm(Comp_decay ~ ns(GT_rpm, 3) + ns(Gen_rpm, 3) +
ns(Comp_out_temp, 3) + ns(Turbine_press, 3) + Turb_inj_cnt,
data = df1_tr))
Residuals:
Min 1Q Median 3Q Max
-0.0007519 -0.0001560 0.0000006 0.0001619 0.0008328
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 9.923e-01 1.886e-04 5262.383 < 2e-16 ***
ns(GT_rpm, 3)1 5.519e-03 2.268e-04 24.338 < 2e-16 ***
ns(GT_rpm, 3)2 1.093e-02 3.593e-04 30.427 < 2e-16 ***
ns(GT_rpm, 3)3 7.457e-03 2.166e-04 34.429 < 2e-16 ***
ns(Gen_rpm, 3)1 -1.597e-02 6.112e-05 -261.302 < 2e-16 ***
ns(Gen_rpm, 3)2 -3.360e-02 1.583e-04 -212.259 < 2e-16 ***
ns(Gen_rpm, 3)3 -2.501e-02 6.927e-05 -360.997 < 2e-16 ***
ns(Comp_out_temp, 3)1 -6.653e-02 9.104e-05 -730.836 < 2e-16 ***
ns(Comp_out_temp, 3)2 -1.380e-01 1.863e-04 -740.760 < 2e-16 ***
ns(Comp_out_temp, 3)3 -1.043e-01 1.267e-04 -823.456 < 2e-16 ***
ns(Turbine_press, 3)1 5.715e-02 1.081e-04 528.688 < 2e-16 ***
ns(Turbine_press, 3)2 1.169e-01 1.939e-04 602.970 < 2e-16 ***
ns(Turbine_press, 3)3 8.054e-02 1.033e-04 779.433 < 2e-16 ***
Turb_inj_cnt 3.718e-05 7.849e-06 4.738 2.48e-06 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.0002419 on 982 degrees of freedom
Multiple R-squared: 0.9997, Adjusted R-squared: 0.9997
F-statistic: 2.878e+05 on 13 and 982 DF, p-value: < 2.2e-16
Call:
lm(formula = lm(Comp_decay ~ ns(GT_rpm, 4) + ns(Gen_rpm, 4) +
ns(Comp_out_temp, 4) + ns(Turbine_press, 4) + Turb_inj_cnt,
data = df1_tr))
Residuals:
Min 1Q Median 3Q Max
-7.234e-04 -1.581e-04 1.039e-05 1.620e-04 8.447e-04
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 9.922e-01 2.022e-04 4906.207 < 2e-16 ***
ns(GT_rpm, 4)1 4.961e-03 2.182e-04 22.736 < 2e-16 ***
ns(GT_rpm, 4)2 6.396e-03 2.558e-04 25.002 < 2e-16 ***
ns(GT_rpm, 4)3 1.058e-02 3.531e-04 29.967 < 2e-16 ***
ns(GT_rpm, 4)4 8.104e-03 2.722e-04 29.773 < 2e-16 ***
ns(Gen_rpm, 4)1 -1.386e-02 8.090e-05 -171.260 < 2e-16 ***
ns(Gen_rpm, 4)2 -1.827e-02 7.346e-05 -248.733 < 2e-16 ***
ns(Gen_rpm, 4)3 -3.272e-02 1.682e-04 -194.492 < 2e-16 ***
ns(Gen_rpm, 4)4 -2.605e-02 8.080e-05 -322.419 < 2e-16 ***
ns(Comp_out_temp, 4)1 -5.633e-02 9.097e-05 -619.218 < 2e-16 ***
ns(Comp_out_temp, 4)2 -7.719e-02 1.049e-04 -736.167 < 2e-16 ***
ns(Comp_out_temp, 4)3 -1.351e-01 1.969e-04 -686.161 < 2e-16 ***
ns(Comp_out_temp, 4)4 -1.083e-01 1.343e-04 -806.088 < 2e-16 ***
ns(Turbine_press, 4)1 4.950e-02 1.273e-04 388.992 < 2e-16 ***
ns(Turbine_press, 4)2 6.701e-02 1.132e-04 591.783 < 2e-16 ***
ns(Turbine_press, 4)3 1.120e-01 1.963e-04 570.628 < 2e-16 ***
ns(Turbine_press, 4)4 8.570e-02 1.057e-04 810.631 < 2e-16 ***
Turb_inj_cnt 4.271e-05 8.887e-06 4.806 1.78e-06 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.0002369 on 978 degrees of freedom
Multiple R-squared: 0.9997, Adjusted R-squared: 0.9997
F-statistic: 2.294e+05 on 17 and 978 DF, p-value: < 2.2e-16
Call:
lm(formula = lm(Comp_decay ~ ns(GT_rpm, 5) + ns(Gen_rpm, 5) +
ns(Comp_out_temp, 5) + ns(Turbine_press, 5) + Turb_inj_cnt,
data = df1_tr))
Residuals:
Min 1Q Median 3Q Max
-7.364e-04 -1.553e-04 8.890e-06 1.610e-04 8.662e-04
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 9.922e-01 2.013e-04 4928.257 < 2e-16 ***
ns(GT_rpm, 5)1 4.151e-03 1.713e-04 24.234 < 2e-16 ***
ns(GT_rpm, 5)2 5.917e-03 2.516e-04 23.520 < 2e-16 ***
ns(GT_rpm, 5)3 7.214e-03 2.694e-04 26.778 < 2e-16 ***
ns(GT_rpm, 5)4 1.046e-02 3.432e-04 30.482 < 2e-16 ***
ns(GT_rpm, 5)5 8.427e-03 2.853e-04 29.540 < 2e-16 ***
ns(Gen_rpm, 5)1 -1.145e-02 8.992e-05 -127.379 < 2e-16 ***
ns(Gen_rpm, 5)2 -1.581e-02 9.101e-05 -173.669 < 2e-16 ***
ns(Gen_rpm, 5)3 -1.998e-02 8.768e-05 -227.834 < 2e-16 ***
ns(Gen_rpm, 5)4 -3.192e-02 1.715e-04 -186.190 < 2e-16 ***
ns(Gen_rpm, 5)5 -2.683e-02 8.707e-05 -308.097 < 2e-16 ***
ns(Comp_out_temp, 5)1 -4.708e-02 8.924e-05 -527.584 < 2e-16 ***
ns(Comp_out_temp, 5)2 -6.589e-02 1.108e-04 -594.564 < 2e-16 ***
ns(Comp_out_temp, 5)3 -8.338e-02 1.106e-04 -754.229 < 2e-16 ***
ns(Comp_out_temp, 5)4 -1.334e-01 2.058e-04 -648.039 < 2e-16 ***
ns(Comp_out_temp, 5)5 -1.104e-01 1.371e-04 -805.040 < 2e-16 ***
ns(Turbine_press, 5)1 4.003e-02 1.240e-04 322.818 < 2e-16 ***
ns(Turbine_press, 5)2 5.909e-02 1.455e-04 406.233 < 2e-16 ***
ns(Turbine_press, 5)3 7.245e-02 1.212e-04 597.897 < 2e-16 ***
ns(Turbine_press, 5)4 1.090e-01 1.996e-04 546.147 < 2e-16 ***
ns(Turbine_press, 5)5 8.847e-02 1.091e-04 810.719 < 2e-16 ***
Turb_inj_cnt 4.604e-05 8.968e-06 5.133 3.44e-07 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.000236 on 974 degrees of freedom
Multiple R-squared: 0.9998, Adjusted R-squared: 0.9997
F-statistic: 1.871e+05 on 21 and 974 DF, p-value: < 2.2e-16
Se hace una comparación en la relevancia del aumento de complejidad del modelo versus la disminución del error de las predicciones:
| Res.Df | RSS | Df | Sum of Sq | F | Pr(>F) |
|---|---|---|---|---|---|
| 990 | 0.0003421 | NA | NA | NA | NA |
| 982 | 0.0000575 | 8 | 0.0002847 | 638.730715 | 0.0000000 |
| 978 | 0.0000549 | 4 | 0.0000026 | 11.515458 | 0.0000000 |
| 974 | 0.0000543 | 4 | 0.0000006 | 2.805084 | 0.0247432 |
Se puede observar que el ultimo modelo (modelo No lineal #3) no representa un aumento significativo en la disminución del error (el Pr(>F) es aproximadamente igual a 0.05 o mayor), por lo que la complejidad del modelo no se requiere aumentar mas allá de lo definido en el Modelo No lineal #2.
| x | |
|---|---|
| mdl_l | 3.51e-05 |
| mdl_nl1 | 6.00e-06 |
| mdl_nl2 | 5.70e-06 |
| mdl_nl3 | 5.80e-06 |
El fenómeno por el cual modelos mas complejos llevan a errores de predicción mas grandes se conoce como overfitting, y se debe a que los modelos complejos tienden a imitar los valores del conjunto de datos de entrenamiento de forma mas exacta, pero de paso aumenta el comportamiento errático de la función que describe los datos de entrenamiento. Lo anterior deriva en que cuando se van a hacer predicciones de datos que no se conocen el modelo presenta mayor error de predicción.
El modelo no lineal # 2 es el que mejor comportamiento presenta para la predicción del comportamiento del sistema del cual se han obtenido los datos.
Esta conclusión se ha obtenido después de:
El paso final es la selección del modelo final e implementación.